Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
до модульної контрольної роботи № 2
Варіант 16(1)
Дата «15» грудня 2021
Завдання за варіантом: (16)
/
Тобто варіант 8, тобто 4-й.
Матриця шифрування:
7
6
4
5
ЗАКОДОВАНЕ ПОВІДОМЛЕННЯ: «kpah»
Варіант роботи коли ми беремо «а» як символ під номером 1:
/
Та варіант виконання задачі коли ми беремо «а» як символ під номером 0:
/
Код програми:
На перевірку буде надісланий варіант програми, за яким «а» під номером 1.
Посилання на Repl.it:
https://replit.com/join/jnhrpcfmna-tr-15khavkin
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
void modar(int ar[2][2], float ar2[2][2],float deter){
float n;
int mat[2][2];
for(int i=0; i<2;i++)//Знаходження оберненої матриці без визначника
for(int j=0;j<2;j++)
mat[j][i]=pow(-1,i+j)*ar[1-i][1-j];
for(int i=0; i<2;i++){
for(int j=0;j<2;j++){
int k=1;
int mo = 0;
n = ar2[i][j];
while(mo!=1){
if(n<0){
if(n != round(n)){
ar2[i][j]=(mat[i][j]+26*k)/deter;
n=ar2[i][j];
}else{
ar2[i][j]=ar2[i][j]+26*k;
n=ar2[i][j];
}
}else if(n != round(n)){
ar2[i][j]=(mat[i][j]+26*k)/deter;
n=ar2[i][j];
}else{
ar2[i][j]=round(n);
mo=1;
}
k++;
}
}
}
}
void printMatrix(int arr[2][2]){//Метод для виводу матриці
printf("Задана матриця");
for(int i=0; i<2;i++){
printf("\n");
for(int j=0;j<2;j++){
printf("\t%d\t", arr[i][j]);
}
}
}
float getN(int arr[2][2]){//Метод для обчислювання визначинка 2
float N=0;
N=arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0];
if (N == 0){
printf("\nВизначник дорівнєю 0, обчислення неможливе \n");
} else {
printf("\nВизначник: %f", N);
}
return N;
}
int main(void){
int a[2][2], i, j;
float mat[2][2];
float det;
printf("Ввести початкову данні для матриці:\n");
for(i = 0; i < 2; i++)//Ввод початкових данних
for(j = 0; j < 2; j++)
scanf("%d", &a[i][j]);
printMatrix(a);
det = getN(a);
for(int i=0; i<2;i++)//Знаходження оберненої матриці
for(int j=0;j<2;j++)
mat[j][i]=pow(-1,i+j)*a[1-i][1-j]/det;
printf("\nОбернена матриця");//Вивід оберненої матриці
for(int i=0; i<2;i++){
printf("\n");
for(int j=0;j<2;j++){
printf(" %.4f ", mat[i][j]);
}
}
printf("\nОбернена матриця після обрацювання");
modar(a, mat,det);
int arr3[2][2];
for(int i=0; i<2;i++){
printf("\n");
for(int j=0;j<2;j++){
arr3[i][j]=round((int)mat[i][j]);
printf(" %d ", arr3[i][j]);
}
}
printf("\nВвести початкову строку:");
char str1[5]="";
int kod[4];
scanf("%4s", str1);
printf("\nПочаткова строка: %s", str1);
char alf[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
printf("\nЇї код:");
for(int i=0;i<4;i++){
for(int j=0;j<26;j++){
if(str1[i]==alf[j]){
kod[i]=j+1;
}
}
printf(" %d ",kod[i]);
}
int arr4[2][1];
int f=0;
for(int i = 0; i < 2; i++){
arr4[i][0]=arr3[i][0]*kod[f]+arr3[i][1]*kod[f+1];
}
f=f+2;
printf("\nВектор результатів для %c%c: після mod 26:",str1[0],str1[1]);
for(int i = 0; i < 2; i++){
if(arr4[i][0]>26)
arr4[i][0]=arr4[i][0]%26;
kod[i]=arr4[i][0];
printf("\n%d", arr4[i][0]);
}
for(int i = 0; i < 2; i++){
arr4[i][0]=arr3[i][0]*kod[f]+arr3[i][1]*kod[f+1];
}
printf("\nВектор результатів для %c%c: після mod 26:",str1[2],str1[3]);
for(int i = 0; i < 2; i++){
if(arr4[i][0]>26)
arr4[i][0]=arr4[i][0]%26;
kod[i+2]=arr4[i][0];
printf("\n%d", arr4[i][0]);
}
printf("\nКод отриманого повідомлення:\n");
for(int i=0; i<4;i++){
printf("%d ", kod[i]);
}...